Item Picker topic
Item Picker
Item Picker package is useful when we need to display an list of items and select one or more than one of them. There is possible customizations such as passing configuration or/and custom item, separator, footer, error and empty widgets.
Widgets
Within the item_picker package you can call the showItemPickerBottomSheet function in order
to show your picker list.
showItemPickerBottomSheet
The showItemPickerBottomSheet function is a convenience function for displaying an ItemPicker
modal sheet with some pre-configured options. It requires a context, title, list
of selectedItems, function that return a list of generic type callback, service. The package
provide even more optional customizations as part of ItemPickerConfiguration. There you can set some
properties like isMultiSelect, isItemSelectionRequired, isStatic, itemHeight, fullScreen.
Another optional customization can be applied by using the itemBuilder, separatorBuilder,footerBuilder,
errorBuilder or emptyBuilder.
How to use
In order to start using this package you need to add the dependency to the widget_toolkit in
your pubspec.yaml file.
widget_toolkit: any
After that you can import the package with the following line:
import 'package:widget_toolkit/item_picker.dart';
additional step is the requirement to add the WidgetToolkitTheme and ItemPickerTheme as a extension to your ThemeData.
as an example:
//theme
//...
extensions: [
darkMode ? WidgetToolkitTheme.dark : WidgetToolkitTheme.light,
darkMode ? ItemPickerTheme.dark : ItemPickerTheme.light,
]
//..
In order to fetch the models you want to present in the bottom sheet dialog you need to implement your Service as follows:
class MyModel implements PickerItemModel {
String? get itemDisplayName => 'The $title of the model, presented however you like';
}
class MyCustomService implements ItemPickerService<MyModel> {
Future<List<MyModel>> getItems() async => [...list of models];
}
Once you register the MyCustomService as part of your DI then you can call the showItemPickerBottomSheet anywhere in your app with the following minimal configuration:
showItemPickerBottomSheet<MyModel>(
context: context,
service: context.read<MyCustomService>
);
The showItemPickerBottomSheet provides a lot of customization options such as:
showItemPickerBottomSheet<DataModel>(
context: context,
title: title,
separatorBuilder: (ctx, index) => _buildCustomSeparator(index),
footerBuilder: (ctx) => _buildCustomFooter(),
itemBuilder: (ctx, model, isSelected, isLoading) => _buildCustomListItem(model, isSelected, isLoading),
selectedItems: _selectedDataArray,
callback: (data) => setState(() => _selectedDataArray = data),
service: DataService(data: [DataModel(), DataModel(), DataModel()]),
configuration: ItemPickerConfiguration(
isItemSelectionRequired: false,
fullScreen: false,
isMultiSelect: true,
isStatic: false,
),
);